// 导入 axios
import axios from 'axios';
// 导入 qs
import qs from 'qs';

// 初始化配置 axios
const request = axios.create({
    baseURL : '/api',
    timeout : 24000,	// 请求的超时时间（ms）
    transformRequest : function(data){
        return qs.stringify(data);	// 请求参数做统一处理
    },
});

// 设置 axios 请求 拦截器
request.interceptors.request.use(config=>{
    // 设置 请求头信息中带上token
    // config.headers.Authorization = getToken();
    return config;
},error=>{
    return Promise.reject(error);
});

// 设置 axios 响应 拦截器
request.interceptors.response.use(response=>{
    return response;
},error=>{
    let errMsg = '';
    if (error && error.response && error.response.status) {
        // 根据 错误的 http状态号 做 统一错误处理
        switch (error.response.status) {
            case 401: errMsg = '登录状态失效，请重新登录';break;
            case 402: errMsg = '登录信息验证失败，还未登录';break;
            case 403: errMsg = '拒绝访问'; break;
            case 404: errMsg = '请求资源不存在'; break;
            case 408: errMsg = '请求超时'; break;
            case 500: errMsg = '服务器内部错误'; break;
            case 501: errMsg = '服务未实现'; break;
            case 502: errMsg = '网关错误'; break;
            case 503: errMsg = '服务不可用'; break;
            case 504: errMsg = '网关超时'; break;
            case 505: errMsg = 'HTTP版本不受支持'; break;
            default: errMsg = error.response.data.msg;
        }
    } else {
        errMsg = error;
    }
    console.log(errMsg);
});

// 封装 restful api 请求
// 向服务器发送GET请求的方法
export const get = ( url , params={} ) => {
    return request({
        url : url,
        method : "GET",
        params : params
    });
}

// 向服务器发送POST请求的方法
export const post = ( url , params={} ) => {
    return request({
        url : url,
        method : "POST",
        data :  params
    });
}

// 向服务器发送PUT请求的方法
export const put = ( url , params={} ) => {
    return request({
        url : url,
        method : "PUT",
        data : params
    });
}

// 向服务器发送PATCH请求的方法
export const patch = ( url , params={} ) => {
    return request({
        url : url,
        method : "PATCH",
        data :  params
    });
}

// 向服务器发送DELETE请求的方法
export const del = ( url , params={} ) => {
    return request({
        url : url,
        method : "DELETE",
        data :  params
    });
}
export default request
